ديف أوبس

بحث الملفات في لينكس: find و locate

جدول المحتوى

كيفية استخدام أمرَي find و locate للبحث عن الملفات على نظام Linux

يُعتبر نظام Linux من أكثر أنظمة التشغيل انتشارًا واستخدامًا في مجال الخوادم، والبرمجة، وإدارة الشبكات، وغيرها من المجالات التقنية. ومن بين الأدوات الأساسية التي يحتاجها المستخدمون والمهندسون لإدارة الملفات والبحث عنها هي أوامر البحث. في هذا المقال سنتناول بالتفصيل أمرَي find و locate، وهما من أشهر الأدوات المتاحة على Linux للبحث عن الملفات والمجلدات، مع شرح كامل لكيفية استخدام كل منهما، والفرق بينهما، وأمثلة تطبيقية توضح الاستخدامات المتقدمة.


مقدمة عن البحث عن الملفات في Linux

البحث عن الملفات والمجلدات هو أحد المهام الأساسية التي تُنجز بشكل يومي في بيئة نظام Linux. قد يحتاج المستخدم إلى إيجاد ملف معين عبر نظام ملفات معقد يمتد عبر مئات الآلاف من الملفات، أو البحث حسب تاريخ التعديل، أو الحجم، أو نوع الملف، أو حتى بناءً على محتوى داخل الملف.

نظام Linux يوفر عدة أدوات للبحث، من بينها أمرَي find و locate، اللذان يقدمان إمكانيات مميزة تساعد المستخدمين على تحديد مواقع الملفات بسرعة وفعالية. وعلى الرغم من أن كلا الأمرين يخدمان هدفًا مشتركًا، إلا أن طريقة عمل كل منهما مختلفة تمامًا، وهذا ما يجعل من الضروري فهم خصائص كل منهما.


أمر find: بحث ديناميكي ومرن

ما هو أمر find؟

أمر find هو أداة بحث ديناميكية تقوم بفحص نظام الملفات مباشرة في الوقت الفعلي (real-time)، حيث يبحث في الملفات والمجلدات من نقطة انطلاق يحددها المستخدم في شجرة النظام. يمكنه البحث وفق شروط متعددة مثل اسم الملف، النوع، الحجم، الوقت، الأذونات، والمالك، وغيرها.

يتميز أمر find بأنه لا يعتمد على قاعدة بيانات أو فهرس مسبق، بل يقوم بفحص نظام الملفات بشكل مباشر، ما يجعله مفيدًا للبحث عن الملفات التي تم إنشاؤها أو تعديلها مؤخرًا والتي قد لا تكون موجودة في قاعدة بيانات محدثة.


البنية الأساسية لأمر find

الشكل العام لأمر find هو كالتالي:

bash
find [نقطة_الانطلاق] [خيارات البحث] [إجراءات]
  • نقطة الانطلاق (Path): المسار الذي يبدأ منه البحث، مثل /home/user أو / للبحث في كامل النظام.

  • خيارات البحث: شروط أو معايير تحدد نوع الملفات المراد البحث عنها.

  • الإجراءات: الأوامر التي تُنفذ على الملفات التي يطابقها البحث، مثل عرضها أو حذفها.


أمثلة شائعة على استخدام find

البحث عن ملف حسب الاسم

bash
find /home/user -name "document.txt"

يبحث هذا الأمر عن ملف اسمه document.txt داخل مجلد المستخدم /home/user وكل المجلدات الفرعية.

البحث عن ملفات حسب الامتداد

bash
find /var/log -name "*.log"

يبحث عن كل الملفات التي تنتهي بالامتداد .log في مجلد /var/log.

البحث عن ملفات حسب النوع

bash
find /tmp -type d

يعرض كل المجلدات (directories) داخل /tmp. حيث أن -type d تعني البحث عن مجلدات.

البحث عن ملفات أكبر من حجم معين

bash
find /home -size +100M

يبحث في /home عن الملفات التي حجمها أكبر من 100 ميجابايت.

البحث عن ملفات معدلة خلال فترة معينة

bash
find /etc -mtime -7

يبحث عن الملفات التي تم تعديلها خلال آخر 7 أيام.


استخدام find مع الإجراءات

حذف ملفات

bash
find /tmp -name "*.tmp" -type f -delete

يحذف كل الملفات التي تنتهي بـ .tmp داخل مجلد /tmp.

تنفيذ أوامر على الملفات

يمكن تنفيذ أوامر مثل chmod أو chown على الملفات التي يعثر عليها find باستخدام الخيار -exec:

bash
find /var/www -type f -name "*.php" -exec chmod 644 {} \;

يقوم هذا الأمر بتغيير صلاحيات كل ملفات PHP داخل /var/www إلى 644.


خيارات متقدمة مع find

  • -user: البحث عن الملفات التي يملكها مستخدم معين.

bash
find /home -user username
  • -group: البحث عن الملفات التابعة لمجموعة معينة.

  • -perm: البحث عن الملفات التي لها أذونات محددة.

bash
find / -perm 644
  • -empty: العثور على الملفات أو المجلدات الفارغة.

  • -iname: البحث عن اسم ملف غير حساس لحالة الحروف.

bash
find /home -iname "Document.TXT"

أمر locate: بحث سريع باستخدام قاعدة بيانات

ما هو أمر locate؟

على عكس find، يعتمد أمر locate على قاعدة بيانات مسبقة تحتوي على مسارات الملفات على النظام. هذه القاعدة يتم تحديثها عادةً تلقائيًا من خلال خدمة تدعى updatedb، والتي تقوم بفهرسة ملفات النظام على فترات منتظمة.

الميزة الأساسية لـ locate هي السرعة الكبيرة في البحث مقارنة بـ find، لأنه لا يقوم بفحص نظام الملفات بشكل مباشر، بل يبحث في قاعدة بيانات جاهزة، ما يجعله مناسبًا للبحث السريع عن الملفات التي تم فهرستها.


كيفية تحديث قاعدة بيانات locate

قاعدة بيانات locate لا تُحدث تلقائيًا عند كل عملية حفظ أو تعديل ملف. لذلك، قد تحتاج إلى تحديثها يدويًا باستخدام الأمر:

bash
sudo updatedb

هذا الأمر يقوم بإنشاء أو تحديث قاعدة بيانات الملفات المستخدمة بواسطة locate.


البنية الأساسية لأمر locate

bash
locate [خيارات] كلمة_البحث
  • كلمة البحث: اسم أو جزء من اسم الملف المراد البحث عنه.

  • خيارات: محددات إضافية للتحكم في النتائج، مثل عرض عدد معين من النتائج أو البحث في قاعدة بيانات مخصصة.


أمثلة على استخدام locate

البحث عن ملف حسب الاسم

bash
locate document.txt

يعرض كل الملفات التي تحتوي في مسارها أو اسمها على document.txt.

البحث باستخدام تعبير عادي (regex)

bash
locate --regex ".*\.conf$"

يعرض كل الملفات التي تنتهي بالامتداد .conf.

عرض عدد محدد من النتائج

bash
locate -n 20 sshd_config

يعرض أول 20 نتيجة فقط لملفات تحتوي على sshd_config.


مزايا وعيوب locate مقارنة بـ find

الخاصية find locate
السرعة بطيء (يفحص النظام مباشرة) سريع (يبحث في قاعدة بيانات)
دقة النتائج دقيقة (يبحث عن الملفات الحقيقية) قديمة (تعتمد على آخر تحديث)
شروط البحث معقدة ومرنة جداً محدودة (بحث نصي بسيط)
قابلية البحث بحث دقيق حسب التاريخ، الحجم، … بحث سريع حسب الاسم فقط
تحديث قاعدة البيانات لا يحتاج لتحديث يحتاج لتحديث دوري بواسطة updatedb

مقارنة تفصيلية بين find و locate

الجدول التالي يوضح الفرق بين الأوامر:

المعامل find locate
آلية البحث البحث في الوقت الحقيقي (real-time) البحث في قاعدة بيانات مسبقة
سرعة التنفيذ بطيء نسبيًا سريع جدًا
تحديث البيانات ليس مطلوبًا يتطلب تحديث دوري (updatedb)
شروط البحث دعم معايير متعددة ومتقدمة بحث نصي مبسط
التخصيص في النتائج عالي جدًا محدود
إمكانية تنفيذ أوامر يدعم تنفيذ أوامر مع الملفات لا يدعم تنفيذ أوامر بعد البحث
استهلاك الموارد مرتفع نسبيًا منخفض جدًا
دقة النتائج دقيقة ومباشرة قد تكون غير دقيقة (إن لم يتم التحديث)

كيفية اختيار الأداة المناسبة

  • إذا كان البحث عن ملف جديد تم إنشاؤه مؤخرًا أو لم يتم تحديث قاعدة بيانات locate بعد، يُفضل استخدام find.

  • عند الحاجة إلى البحث السريع عن ملفات معروفة وموجودة في قاعدة البيانات، يكون locate هو الخيار الأنسب.

  • في حالة الحاجة لتحديد ملفات بناءً على معايير متعددة (مثل الوقت، الحجم، النوع، الأذونات)، لا بد من استخدام find لأنه يقدم مرونة أكبر.

  • لاستخدام locate بكفاءة، يفضل تحديث قاعدة البيانات بشكل دوري باستخدام updatedb لضمان نتائج حديثة ودقيقة.


نصائح عملية متقدمة لاستخدام find و locate

تحسين أداء find

  • تقييد نقطة الانطلاق إلى مجلد معين يقلل وقت البحث:

bash
find /var/log -name "*.log"
  • استخدام الخيارات المدمجة للبحث يقلل من عدد الملفات الممسوحة:

bash
find /home -type f -name "*.txt" -size +1M

استخدام locate مع تحديث مخصص

  • يمكن تخصيص تحديث قاعدة بيانات locate ليشمل أو يستثني مسارات معينة لتقليل حجم القاعدة وتحسين الأداء.

  • استخدام خيار --database لتحديد قاعدة بيانات خاصة:

bash
locate --database /path/to/custom.db filename

استعراض بعض الحالات العملية

1. البحث عن ملفات السجلات القديمة

باستخدام find يمكن البحث عن ملفات السجلات التي لم يتم تعديلها خلال فترة طويلة:

bash
find /var/log -name "*.log" -mtime +30

يعني البحث عن ملفات .log لم يتم تعديلها لأكثر من 30 يومًا.

2. تنظيف ملفات مؤقتة

باستخدام find مع الحذف التلقائي:

bash
find /tmp -type f -name "*.tmp" -delete

يحذف الملفات المؤقتة التي تنتهي بـ .tmp في مجلد /tmp.

3. البحث السريع عن ملف تكوين

باستخدام locate:

bash
locate sshd_config

يعرض المسارات التي تحتوي على ملف التكوين sshd_config.


الخلاصة

يعد كل من أمرَي find و locate من الأدوات القوية في بيئة Linux للبحث عن الملفات، لكنهما يختلفان جوهريًا في آلية العمل والسرعة والمرونة.

  • find يتميز بالمرونة والدقة العالية حيث يبحث في الوقت الفعلي ويدعم معايير بحث معقدة وتنفيذ إجراءات على الملفات.

  • locate يوفر سرعة فائقة بفضل استخدام قاعدة بيانات محدثة بشكل دوري لكنه يعتمد على تحديثها ليعطي نتائج دقيقة.

من المهم إتقان استخدام كلا الأداتين واختيار الأنسب حسب نوع المهمة، فالبحث في نظام Linux هو من أساسيات إدارة النظام، والمهارة في استخدام هذه الأدوات توفر الوقت والجهد وتحسن من تجربة المستخدم بشكل كبير.


المصادر والمراجع